﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using model;
using negocio.Util;

namespace negocio
{
    public class LibroBO
    {
        public int insertar(LIBRO libro)
        {
            ContextoTienda contexto = new ContextoTienda();
            int id = -1;

            contexto.AddToLIBRO(libro);
            contexto.SaveChanges();
            id = (int)contexto.LIBRO.OrderByDescending(L => L.LIB_ID).First().LIB_ID;
            contexto.Dispose();

            return id;
        }

        public List<LibroUtil> listarTodos()
        {
            ContextoTienda contexto = new ContextoTienda();
            List<LibroUtil> lista = new List<LibroUtil>();

            lista = (from L in contexto.LIBRO
                     select new LibroUtil()
                     {
                         CAT_ID = L.SUBCATEGORIA.CATEGORIA.CAT_ID,
                         CAT_NOMBRE = L.SUBCATEGORIA.CATEGORIA.CAT_NOMBRE,
                         CAT_DESCRIPCION = L.SUBCATEGORIA.CATEGORIA.CAT_DESCRIPCION,

                         SUB_ID = L.SUBCATEGORIA.SUB_ID,
                         SUB_NOMBRE = L.SUBCATEGORIA.SUB_NOMBRE,
                         SUB_DESCRIPCION = L.SUBCATEGORIA.SUB_DESCRIPCION,

                         LIB_ID=L.LIB_ID,
                         LIB_ISBN=L.LIB_ISBN,
                         LIB_TITULO = L.LIB_TITULO,
                         LIB_EDITORIAL=L.LIB_EDITORIAL,
                         LIB_NUMPAGINAS=L.LIB_NUMPAGINAS,
                         LIB_RESUMEN=L.LIB_RESUMEN,
                         LIB_CANTDISPONIBLE=L.LIB_CANTDISPONIBLE,
                         LIB_PRECIO=L.LIB_PRECIO,
                         LIB_URL=L.LIB_URL
                     }).OrderBy(L => L.LIB_TITULO).ToList();

            return lista;
        }
        public List<LibroUtil> obtenerLibrosPorCategoria(String texto)
        {
            ContextoTienda contexto = new ContextoTienda();
            List<LibroUtil> lista = new List<LibroUtil>();


            lista = (from L in contexto.LIBRO
                     select new LibroUtil()
                     {
                         CAT_ID = L.SUBCATEGORIA.CATEGORIA.CAT_ID,
                         CAT_NOMBRE = L.SUBCATEGORIA.CATEGORIA.CAT_NOMBRE,
                         CAT_DESCRIPCION = L.SUBCATEGORIA.CATEGORIA.CAT_DESCRIPCION,

                         SUB_ID = L.SUBCATEGORIA.SUB_ID,
                         SUB_NOMBRE = L.SUBCATEGORIA.SUB_NOMBRE,
                         SUB_DESCRIPCION = L.SUBCATEGORIA.SUB_DESCRIPCION,

                         LIB_ID = L.LIB_ID,
                         LIB_ISBN = L.LIB_ISBN,
                         LIB_TITULO = L.LIB_TITULO,
                         LIB_EDITORIAL = L.LIB_EDITORIAL,
                         LIB_NUMPAGINAS = L.LIB_NUMPAGINAS,
                         LIB_RESUMEN = L.LIB_RESUMEN,
                         LIB_CANTDISPONIBLE = L.LIB_CANTDISPONIBLE,
                         LIB_PRECIO = L.LIB_PRECIO,
                         LIB_URL = L.LIB_URL
                     }).Where(LIB => LIB.CAT_NOMBRE.Contains(texto)).OrderBy(L => L.LIB_TITULO).ToList();

            return lista;
        }
        public List<LibroUtil> obtenerLibrosPorSubCategoria(String texto)
        {
            ContextoTienda contexto = new ContextoTienda();
            List<LibroUtil> lista = new List<LibroUtil>();

            lista = (from L in contexto.LIBRO
                     select new LibroUtil()
                     {
                         CAT_ID = L.SUBCATEGORIA.CATEGORIA.CAT_ID,
                         CAT_NOMBRE = L.SUBCATEGORIA.CATEGORIA.CAT_NOMBRE,
                         CAT_DESCRIPCION = L.SUBCATEGORIA.CATEGORIA.CAT_DESCRIPCION,

                         SUB_ID = L.SUBCATEGORIA.SUB_ID,
                         SUB_NOMBRE = L.SUBCATEGORIA.SUB_NOMBRE,
                         SUB_DESCRIPCION = L.SUBCATEGORIA.SUB_DESCRIPCION,

                         LIB_ID = L.LIB_ID,
                         LIB_ISBN = L.LIB_ISBN,
                         LIB_TITULO = L.LIB_TITULO,
                         LIB_EDITORIAL = L.LIB_EDITORIAL,
                         LIB_NUMPAGINAS = L.LIB_NUMPAGINAS,
                         LIB_RESUMEN = L.LIB_RESUMEN,
                         LIB_CANTDISPONIBLE = L.LIB_CANTDISPONIBLE,
                         LIB_PRECIO = L.LIB_PRECIO,
                         LIB_URL = L.LIB_URL
                     }).Where(LIB => LIB.SUB_NOMBRE.Contains(texto)).OrderBy(L => L.LIB_TITULO).ToList();

            return lista;
        }
        public List<LibroUtil> obtenerLibrosPorPalabra(String texto)
        {
            ContextoTienda contexto = new ContextoTienda();
            List<LibroUtil> lista = new List<LibroUtil>();

            lista = (from L in contexto.LIBRO
                     select new LibroUtil()
                     {
                         CAT_ID = L.SUBCATEGORIA.CATEGORIA.CAT_ID,
                         CAT_NOMBRE = L.SUBCATEGORIA.CATEGORIA.CAT_NOMBRE,
                         CAT_DESCRIPCION = L.SUBCATEGORIA.CATEGORIA.CAT_DESCRIPCION,

                         SUB_ID = L.SUBCATEGORIA.SUB_ID,
                         SUB_NOMBRE = L.SUBCATEGORIA.SUB_NOMBRE,
                         SUB_DESCRIPCION = L.SUBCATEGORIA.SUB_DESCRIPCION,

                         LIB_ID = L.LIB_ID,
                         LIB_ISBN = L.LIB_ISBN,
                         LIB_TITULO = L.LIB_TITULO,
                         LIB_EDITORIAL = L.LIB_EDITORIAL,
                         LIB_NUMPAGINAS = L.LIB_NUMPAGINAS,
                         LIB_RESUMEN = L.LIB_RESUMEN,
                         LIB_CANTDISPONIBLE = L.LIB_CANTDISPONIBLE,
                         LIB_PRECIO = L.LIB_PRECIO,
                         LIB_URL = L.LIB_URL
                     }).Where(LIB => LIB.LIB_TITULO.Contains(texto)).OrderBy(L => L.LIB_TITULO).ToList();


            return lista;
        }
    }
}
